package com.afdor.rws.event.driven.api;

import com.afdor.rws.annotation.extension.SPI;
import com.afdor.rws.event.driven.entities.Event;

/**
 * 事件状态变更通知管理器
 *
 * @author 悭梵
 * @date Created in 2018-12-07 10:48
 */
@SPI("default")
public interface EventChangeManager {

    /**
     * 初始化
     *
     * @return
     */
    <T extends EventChangeManager> T init();

    /**
     * 添加监听器
     *
     * @param listener
     */
    <T extends EventChangeManager> T addEventChangeListener(EventChangeListener listener);

    /**
     * 通知事件状态改变
     *
     * @param event
     */
    void eventChanged(Event event);

    /**
     * 停止执行
     */
    void destroy();
}
